﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using System.Windows.Media;
using System.IO;
using System.Windows;

namespace Main.Tools
{
    public class ControlToImage
    {
        public static void PrintVisualToFile(Control control,int pixWidth,int pixHeight, string pngFile)
        {
            // 确定需要渲染的视觉对象的尺寸


            // 创建一个RenderTargetBitmap对象，其像素尺寸与视觉对象的渲染尺寸相匹配

            double dpi = pixWidth / control.ActualWidth * 96;//WPF的单位为1/96英寸
            RenderTargetBitmap renderTarget = new RenderTargetBitmap(
                pixWidth, pixHeight, dpi, dpi, PixelFormats.Pbgra32);

            // 使用Visual对象作为输入，渲染到RenderTargetBitmap
            renderTarget.Render(control);

            // 创建一个PngBitmapEncoder对象，并添加位图到其中
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(renderTarget));

            // 打开文件流，将位图编码保存到文件中
            using (FileStream fileStream = new FileStream(pngFile, FileMode.Create))
            {
                encoder.Save(fileStream);
            }
        }
    }
}
